Runtime.exec() এবং ProcessBuilder দুটি Java API যা সিস্টেম কমান্ড বা এক্সটার্নাল প্রোগ্রাম চালানোর জন্য ব্যবহৃত হয়। তবে এই দুটি API এর মধ্যে কিছু পার্থক্য রয়েছে, যেমন তাদের সুবিধা, ব্যবহার এবং কনফিগারেশন।
1. Runtime.exec()
Runtime.exec() মেথডটি Java অ্যাপ্লিকেশনের মধ্যে সিস্টেম কমান্ড বা প্রোগ্রাম এক্সিকিউট করতে ব্যবহৃত হয়। এটি Runtime ক্লাসের একটি মেথড যা একটি নতুন প্রক্রিয়া (process) চালু করে এবং এটি একটি Process অবজেক্ট রিটার্ন করে।
ব্যবহার:
Runtime.exec()শুধুমাত্র স্ট্রিং প্যারামিটার হিসেবে সিস্টেম কমান্ড বা প্রোগ্রাম চালাতে পারে।- এটি সিঙ্গেল কমান্ড বা কমান্ড লাইনে একটি একক প্রোগ্রাম রান করানোর জন্য উপযোগী।
- এই মেথডটি খুব সাধারণ এবং অল্প কিছু অপশন দিয়ে সিস্টেম প্রোগ্রাম চালানোর সুবিধা দেয়।
সিনট্যাক্স:
public Process exec(String command) throws IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String command, String[] envp) throws IOException
উদাহরণ:
public class RuntimeExecExample {
public static void main(String[] args) {
try {
String command = "notepad.exe"; // Open Notepad in Windows
Process process = Runtime.getRuntime().exec(command);
System.out.println("Notepad launched!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
Notepad launched!
এখানে, Runtime.getRuntime().exec(command) মেথডটি একটি সিস্টেম প্রোগ্রাম (যেমন, notepad.exe) চালু করেছে।
2. ProcessBuilder
ProcessBuilder Java-র একটি ক্লাস যা Process অবজেক্ট তৈরি করতে ব্যবহৃত হয় এবং এটি আরও উন্নত কনফিগারেশন এবং পরিবেশগত কনফিগারেশন (environment configuration) প্রদান করে। এটি Runtime.exec() থেকে বেশি সুবিধা প্রদান করে এবং একাধিক কমান্ড একসাথে চালানো, ইনপুট আউটপুট (I/O) স্ট্রিম নিয়ন্ত্রণ, এবং প্রসেসের পরিবেশ (environment) সেটিংস আরও সহজভাবে পরিচালনা করতে সহায়তা করে।
ব্যবহার:
ProcessBuilderআরও উন্নত এবং নমনীয়, যেমন একাধিক আর্গুমেন্ট গ্রহণ করতে পারে এবং প্রসেসের পরিবেশ এবং স্ট্রিম পরিচালনা করতে সাহায্য করে।- এটি ব্যবহারকারীর প্রক্রিয়া পরিচালনা এবং সংশ্লিষ্ট আউটপুট বা ইনপুট স্ট্রিম প্রসেসিংয়ের জন্য উপযুক্ত।
সিনট্যাক্স:
public class ProcessBuilder {
public ProcessBuilder(String... command)
public Process start() throws IOException
public void directory(File directory)
public Map<String, String> environment()
}
উদাহরণ:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class ProcessBuilderExample {
public static void main(String[] args) {
ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe");
try {
// Start the process
Process process = processBuilder.start();
System.out.println("Notepad launched!");
// Wait for the process to terminate
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
আউটপুট:
Notepad launched!
এখানে, ProcessBuilder ব্যবহার করে notepad.exe প্রোগ্রামটি চালানো হয়েছে, এবং এটি আরও কাস্টমাইজড এবং কনফিগারযোগ্য।
Runtime.exec() এবং ProcessBuilder এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Runtime.exec() | ProcessBuilder |
|---|---|---|
| সিনট্যাক্স এবং সহজতা | সরল এবং সহজ, কিন্তু কাস্টমাইজেশন কম। | অনেক বেশি নমনীয় এবং কাস্টমাইজেবল। |
| একাধিক আর্গুমেন্ট | এটি একক স্ট্রিং বা স্ট্রিং অ্যারে নেয়ার মাধ্যমে কমান্ড এক্সিকিউট করতে পারে। | এটি একাধিক আর্গুমেন্ট সহজে গ্রহণ করে এবং কমান্ডের পরিবেশ এবং ডিরেক্টরি নির্ধারণের জন্য ভাল। |
| I/O স্ট্রিম নিয়ন্ত্রণ | I/O স্ট্রিম (input/output) নিয়ন্ত্রণের জন্য অতিরিক্ত কনফিগারেশন প্রয়োজন। | স্ট্যান্ডার্ড ইনপুট, আউটপুট এবং এরর স্ট্রিম নিয়ন্ত্রণের জন্য সহজ। |
| প্রসেস পরিবেশ কনফিগারেশন | সরাসরি পরিবেশ কনফিগারেশন সুবিধা প্রদান করে না। | environment() মেথডের মাধ্যমে পরিবেশ কনফিগারেশন প্রদান করা যায়। |
| ব্যবহারযোগ্যতা | সহজ এবং দ্রুত, তবে কম কাস্টমাইজেশন। | বেশি ফ্লেক্সিবিলিটি এবং কাস্টমাইজেশন সহ। |
| সিস্টেম কমান্ড ও প্রসেস ব্যবস্থাপনা | এক বা দুটি সিস্টেম কমান্ড রান করতে ব্যবহার করা হয়। | একাধিক কমান্ড এবং কাস্টম প্রসেস ব্যবস্থাপনা খুব সহজ। |
| স্ট্রিম পাসিং | স্ট্রিম পাসিং খুবই জটিল এবং অতিরিক্ত কোড প্রয়োজন। | এটি স্ট্রিম পাসিংকে সহজ করে দেয় এবং পিএসসি স্ট্রিম নিয়ন্ত্রণ সহজ হয়। |
Runtime.exec()মেথডটি একটি সরল পদ্ধতি যা সিস্টেম কমান্ড চালানোর জন্য ব্যবহৃত হয়, তবে এতে কাস্টমাইজেশন এবং স্ট্রিম নিয়ন্ত্রণের সুবিধা সীমিত।ProcessBuilderক্লাসটি আরও উন্নত এবং নমনীয়, যা কমান্ডের পরিবেশ, ইনপুট/আউটপুট স্ট্রিম, এবং অন্যান্য কনফিগারেশন নির্ধারণের জন্য বেশি সুবিধা প্রদান করে।
যদি আপনার একটি সাধারন কমান্ড এক্সিকিউট করতে হয় এবং পরিবেশের নিয়ন্ত্রণের প্রয়োজন না থাকে, তবে Runtime.exec() সহজ এবং দ্রুত। কিন্তু যদি আপনাকে একাধিক কমান্ড, পরিবেশ কনফিগারেশন, বা স্ট্রিম নিয়ন্ত্রণের প্রয়োজন হয়, তবে ProcessBuilder বেশি উপযুক্ত।
Read more